package testSocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.vecmath.Point3d;

import protocolo.Atendedor;
import protocolo.Enviador;
import protocolo.Pedido;

public class Main {

	public static void main(String[] args) {		
		Main inst = new Main();		
	}
	
	public Pedido pedirDefender(String IP, int puerto, int mejorFuerte) {
		return new Pedido(Pedido.TipoPedido.HELPME, Pedido.TipoTarea.DEFENDER, mejorFuerte, IP, puerto);
	}
	
	public Pedido pedirConquistar(String IP, int puerto, int mejorFuerte) {
		return new Pedido(Pedido.TipoPedido.HELPME, Pedido.TipoTarea.CONQUISTAR, mejorFuerte, IP, puerto);
	} 
	
	public Pedido responderImBusy(String IP, int puerto) {
		return new Pedido(Pedido.TipoPedido.IMBUSY, Pedido.TipoTarea.ATACAR, 0, IP, puerto);
		/*
		Pedido respuesta = new Pedido();
		respuesta.setTipo(Pedido.TipoPedido.IMBUSY);
		respuesta.setIP(IP);
		respuesta.setPuerto(puerto);
		return respuesta;
		*/
	}
	
	public Pedido pedirAtacar(String IP, int puerto, int enemigoAtacante) {
		return new Pedido(Pedido.TipoPedido.HELPME, Pedido.TipoTarea.ATACAR, enemigoAtacante, IP, puerto);
	}	
	
	public Pedido responderICan(String IP, int puerto) {
		return new Pedido(Pedido.TipoPedido.ICAN, Pedido.TipoTarea.ATACAR, 0, IP, puerto);
		/*
		Pedido respuesta = new Pedido();				
		respuesta.setTipo(Pedido.TipoPedido.ICAN);
		respuesta.setIP(IP);
		respuesta.setPuerto(puerto);
		return respuesta;
		*/
	}
	
	
	public Main() {
		
		BufferedReader dataIn = new BufferedReader(new
		InputStreamReader( System.in) );
		
		Enviador enviador = new Enviador();
		Atendedor atendedor = new Atendedor("192.168.10.102");
		//enviador.start();
		atendedor.start();

		String comando = "";
		
		while(!comando.equals("exit")){
			System.out.print("Ingrese comando 'send' o 'exit' ('help' para ayuda): ");
			try{
				comando = dataIn.readLine();
			}catch( IOException e ){
				System.out.println("Error!");
			}
			
			String[] entrada = comando.split(" ");
			
			if(entrada[0].equals("send")){
				//Enviar un mensaje
				
				Pedido mensaje = null;
				
				String IP = entrada[2];
				int puerto = Integer.parseInt(entrada[3]);
				
				if((entrada[1]).toUpperCase().equals("HELPME")){
					//Mandar mensaje de ayuda
					String tipo = entrada[4];					
					int objetivo = Integer.parseInt(entrada[5]);
					
					if(tipo.toUpperCase().equals("DEFENDER")){
						
						mensaje = pedirDefender(IP, puerto, objetivo);
						
					} else if(tipo.toUpperCase().equals("CONQUISTAR")){
						
						mensaje = pedirConquistar(IP, puerto, objetivo);
						
					} else if(tipo.toUpperCase().equals("ATACAR")){						
						
						mensaje = pedirAtacar(IP, puerto, objetivo);
					}
					
				} else if((entrada[1]).toUpperCase().equals("ICAN")){
					//Mandar mensaje de ican
					mensaje = responderICan(IP, puerto);
				} else if((entrada[1]).toUpperCase().equals("IMBUSY")){
					//Mandar mensaje de imbusy
					mensaje = responderImBusy(IP, puerto);
				}
				
				if(mensaje != null){
					//enviador.pedidos.add(mensaje);					
					enviador.enviar(mensaje);
				}
			} else if(entrada[0].equals("exit")){
				//Salir
				enviador.shutdown();
				atendedor.shutdown();
				System.out.println("chau");
				break;				
			} else if(entrada[0].equals("help")){
				//Ayuda
				System.out.println("Comando SEND: Envia un pedido\n Sintaxis - send [helpme|ican|imbusy] [IP] [puerto] (si helmp -> [atacar|defender|conquistar] [0|1|2|3|4|5]) \nUn ejemplo seria: 'send helpme 192.168.10.102 54321 atacar 1' o 'send ican 192.168.10.102 54321'");
				System.out.println("Comando EXIT: Sale de la aplicacion.");
				System.out.println("Comando HELP: Muestra esta ayuda.");
			}
		}				
	}
	
	public static String leerLinea() {
		String x = "";
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		try {
			x = br.readLine();
		} catch (IOException ex) {
			System.err.println("No se pudo leer por alguna razon pacheca...");
		}finally{
			try {
				br.close();
			} catch (IOException ex) {
				System.err.println("No se pudo cerrar el br");
			}finally{
				try {
					isr.close();
				} catch (IOException ex) {
					System.err.println("No se pudo cerrar el isr");
				}
			}
		}
		return x;
	}
	
}
